#include <iostream>
#include <string>
#include <vector>
typedef unsigned long long ULL;
using namespace std;
const ULL P = 131; // 经验值P 131 Q 2的64次方 用ULL溢出可以等价于取模2的64次方
vector<ULL> h, p;
// h[0]表示没有 h[1]表示第一个字母的
// p[i]表示p的i次方（预处理出来）
ULL get(ULL l, ULL r)
{
    return h[r] - h[l - 1] * p[r - l + 1]; // 对齐 然后减
}
int main()
{
    int n, m;
    string str;
    cin >> n >> m >> str;
    h.resize(n + 1, 0);
    p.resize(n + 1, 1);
    for (int i = 1; i <= n; i++)
    {
        p[i] = p[i - 1] * P;
        h[i] = h[i - 1] * P + str[i - 1];
    }
    while (m--)
    {
        ULL l1, r1, l2, r2;
        cin >> l1 >> r1 >> l2 >> r2;
        cout << (get(l1, r1) == get(l2, r2) ? "Yes" : "No") << endl;
    }
    return 0;
}